using System;
using System.Collections.Generic;
using Freshbooks.XmlSerializers;

namespace Freshbooks.Model
{
    [FreshbooksSerialization(Name = "invoice")]
    public class Invoice
    {
        [FreshbooksSerialization(Name = "invoice_id")]
        public int InvoiceId { get; set; }

        [FreshbooksSerialization(Name = "client_id")]
        public int ClientId { get; set; }

        [FreshbooksSerialization(Name = "contacts")]
        public List<Contact> Contacts { get; set; }

        [FreshbooksSerialization(Name = "number")]
        public string Number { get; set; }

        [FreshbooksSerialization(Name = "amount")]
        public float Amount { get; set; }

        [FreshbooksSerialization(Name = "currency_code")]
        public string CurrencyCode { get; set; }

        [FreshbooksSerialization(Name = "language")]
        public string Language { get; set; }

        [FreshbooksSerialization(Name = "amount_outstanding")]
        public float AmountOutstanding { get; set; }

        [FreshbooksSerialization(Name = "status")]
        public string Status { get; set; }

        [FreshbooksSerialization(Name = "date")]
        public DateTime Date { get; set; }

        [FreshbooksSerialization(Name = "folder")]
        public string Folder { get; set; }

        [FreshbooksSerialization(Name = "po_number")]
        public string PONumber { get; set; }

        [FreshbooksSerialization(Name = "discount")]
        public int Discount { get; set; }

        [FreshbooksSerialization(Name = "notes")]
        public string Notes { get; set; }

        [FreshbooksSerialization(Name = "terms")]
        public string Terms { get; set; }

        [FreshbooksSerialization(Name = "client_view")]
        public string ClientView { get; set; }

        [FreshbooksSerialization(Name = "view")]
        public string View { get; set; }

        [FreshbooksSerialization(Name = "edit")]
        public string Edit { get; set; }

        [FreshbooksSerialization(Name = "return_uri")]
        public string ReturnUri { get; set; }

        [FreshbooksSerialization(Name = "updated")]
        public DateTime Updated { get; set; }

        [FreshbooksSerialization(Name = "recurring_id")]
        public int RecurringId { get; set; }

        [FreshbooksSerialization(Name = "organization")]
        public string Organization { get; set; }

        [FreshbooksSerialization(Name = "first_name")]
        public string NameFirst { get; set; }

        [FreshbooksSerialization(Name = "last_name")]
        public string NameLast { get; set; }

        [FreshbooksSerialization(Name = "p_street1")]
        public string Street1 { get; set; }

        [FreshbooksSerialization(Name = "p_street2")]
        public string Street2 { get; set; }

        [FreshbooksSerialization(Name = "p_city")]
        public string City { get; set; }

        [FreshbooksSerialization(Name = "p_state")]
        public string State { get; set; }

        [FreshbooksSerialization(Name = "p_country")]
        public string Country { get; set; }

        [FreshbooksSerialization(Name = "p_code")]
        public string PostalCode { get; set; }

        [FreshbooksSerialization(Name = "vat_name")]
        public string VatName { get; set; }

        [FreshbooksSerialization(Name = "vat_number")]
        public string VatNumber { get; set; }

        [FreshbooksSerialization(Name = "staff_id")]
        public int StaffId { get; set; }

        [FreshbooksSerialization(Name = "lines")]
        public List<Line> Lines { get; set; }

        [FreshbooksSerialization(Name = "contact")]
        public class Contact
        {
            [FreshbooksSerialization(Name = "contact_id")]
            public int ContactId { get; set; }
        }
    }
}